
********************************************************;
**  Output Frequency Table for Jeff FFS-MA comparison **;
********************************************************;

options ls=100 ps=1000 nofmterr;

libname new '/data/Medicare_P01_2009/data/HEDIS/sasdata';
libname raw '/data/Medicare_P01_2009/data/HEDIS/rawdata';


data a0; set new.hedis2006;

    ***************************************************;
    ** Demographic Variables and Sample Selection    **;
    ***************************************************;

     if denom_flag=1;
     if state_code=' ' or state_code='00' or state_code>"53" or state_code in ("40","48") then delete;

     age=age+1; /** Set to End of Year **/

     if age>=65;

    if plan_type='HMO/HMOPOS' or
        plan_type='Local PPO' or
        plan_type='Regional P' ;

     length plantypec $ 3;

     if plan_type='HMO/HMOPOS' then plantypec='HMO';
     if plan_type='Local PPO' or plan_type='Regional P' then plantypec='PPO';

     length newagec $ 8;

     if age=65            then newagec='1.65';
     if age>65 and age<70 then newagec='2.66-69';
     if age>69 and age<75 then newagec='3.70-74';
     if age>74 and age<80 then newagec='4.75-79';
     if age>79 and age<85 then newagec='5.80-84';
     if age>84            then newagec='6.85+';

     if racec=' ' then racec='0.Unknown';

     if age>65 and totmonth<12 then delete;


     *-- Death Indicators and Death Date --*;
 
     death_dt=bene_death_dt;
     if (bene_valid_death_dt_sw='V' or death_dt>0) then death1=1; else death1=0;

     deathyear=year(death_dt);
     deathmon =month(death_dt);

     if death1=1 and
       (deathyear=2006 or
       (deathyear=2007 and (deathmon>0 and deathmon<3)))
     then delete ;


    *-- Delete Health Plans with less than 30 cases *;

     if org_id in ('H0621','H4012','H5732','H5774','H5821') then delete;

        ** Note these plans each have 5,28,3,8,8 cases **;


    *************************************;
    ** Measures Cleaning and Recoding  **;
    *************************************;

     **** Quality Rates ****;

     array rate bcs_d_52_69 bcs_n_52_69 cmc_d cmc_n1 cdc_d1 cdc_n1 cdc_d4 cdc_n4 cdc_d5 cdc_n5 gso_d gso_n;  
     do over rate; 
        if rate=9 then rate=0; 
     end;

     *-- cleaning BCS --*;

     if sex=1 or age>69 then bcs_d_52_69=.; 
     if bcs_d_52_69=0 or bcs_d_52_69=. then bcs_n_52_69=.; 

     *-- cleaning CMC and GSO --*;

     if cmc_d=0 then cmc_n1=.;
     if gso_d=0 then gso_n=.; 

     *-- cleaning CDC ---*;

     if age>75 then do; cdc_d1=.; cdc_d4=.; cdc_d5=.; end;
     if cdc_d1=0 or cdc_d1=. then cdc_n1=.;
     if cdc_d4=0 or cdc_d4=. then cdc_n4=.;
     if cdc_d5=0 or cdc_d5=. then cdc_n5=.; 


     **** FSP and Utilizations ****;

     array fsputi  fsp_n_cabg  fsp_n_ptca fsp_n_cc   fsp_n_ce    fsp_n_rff   fsp_n_thr  fsp_n_tkr  fsp_n_peli
                   fsp_n_och   fsp_n_cch  fsp_n_ah   fsp_n_vh    fsp_n_pros  fsp_n_mast fsp_n_lump fsp_n_bs 
                   ipu_t_acdi  ipu_t_acsdi ipu_t_acmedi  ipu_t_acdy  ipu_t_acsdy ipu_t_acmedy
                   amb_t_ov    amb_t_erv   amb_t_asp     amb_t_obsrd ;
     do over fsputi;
        if fsputi>=9998 then fsputi=0;
     end;


     *-- Cleaning gender specific measures --*;

     if sex=1 then do; fsp_n_ah=.; fsp_n_vh=.;  fsp_n_mast=.; fsp_n_lump=.; end;  /** female only**/
     if sex=2 then fsp_n_pros=.;   /** male only**/


     ***** CAP measures  John and Bruce email 6-4-2010 *****;

     if fsp_n_cabg>3 then fsp_n_cabg=3;   
     if fsp_n_ptca>4 then fsp_n_ptca=4;   
     if fsp_n_cc>4   then fsp_n_cc=4;   
     
     array fps2 fsp_n_ce   fsp_n_rff   fsp_n_thr   fsp_n_tkr   fsp_n_peli    fsp_n_och   fsp_n_cch  
                fsp_n_ah   fsp_n_vh    fsp_n_pros  fsp_n_mast  fsp_n_lump    fsp_n_bs ;
     do over fps2; 
          if fps2>2 then fps2=2;  
     end;
 
     if ipu_t_acdi > 12 then ipu_t_acdi = 12 ;     * Total discharges set max 1 per month *;
     if ipu_t_acsdi > 12 then ipu_t_acsdi = 12 ;   * Surgery discharges *; 
     if ipu_t_acmedi > 12 then ipu_t_acmedi = 12 ; * Medical discharges *;

     if ipu_t_acdy > 365 then ipu_t_acdy = 365 ;  *Maximum possible in 12 months *;
     if ipu_t_acsdy > 365 then ipu_t_acsdy = 365 ;
     if ipu_t_acmedy > 365 then ipu_t_acmedy = 365 ;

     if amb_t_ov > 50 then amb_t_ov = 50;   * Set Total Outpatient Visits maximum 1 per week *;
     if amb_t_erv > 12 then amb_t_erv = 12; * maximum 1 per month *;
     if amb_t_asp > 12 then amb_t_asp = 12;
     if amb_t_obsrd > 12 then amb_t_obsrd = 12;


     %let fsp = fsp_n_cabg  fsp_n_ptca fsp_n_cc   fsp_n_ce    fsp_n_rff   fsp_n_thr  fsp_n_tkr  fsp_n_peli
                fsp_n_och   fsp_n_cch  fsp_n_ah   fsp_n_vh    fsp_n_pros  fsp_n_mast fsp_n_lump fsp_n_bs ;

     %let uti = ipu_t_acdi  ipu_t_acsdi ipu_t_acmedi  ipu_t_acdy  ipu_t_acsdy ipu_t_acmedy
                amb_t_ov    amb_t_erv   amb_t_asp     amb_t_obsrd ;

     %let rate = bcs_d_52_69 bcs_n_52_69 cmc_d cmc_n1 gso_d gso_n cdc_d1 cdc_n1 cdc_d4 cdc_n4 cdc_d5 cdc_n5;

     ********************************************************************;
     ** Rename All Variables and Will Keep Same Var Name for All Years **;
     ********************************************************************;

     bcs_d = bcs_d_52_69 ;   label bcs_d  = 'Denom for Breast Cancer Screening 65-69';
     bcs_n = bcs_n_52_69 ;   label bcs_n  = 'Numer for Breast Cancer Screening 65-69';

     cdc_d1 = cdc_d1;  label cdc_d1 = 'Denom for Diabetes: HbA1cTesting';
     cdc_d3 = cdc_d4;  label cdc_d3 = 'Denom for Diabetes: EyeExam';
     cdc_d4 = cdc_d5;  label cdc_d4 = 'Denom for Diabetes: LCL-C Screening';

     cdc_n1 = cdc_n1;  label cdc_n1 = 'Numer for Diabetes: HbA1cTesting';
     cdc_n3 = cdc_n4;  label cdc_n3 = 'Numer for Diabetes: EyeExam';
     cdc_n4 = cdc_n5;  label cdc_n4 = 'Numer for Diabetes: LCL-C Screening';

     n_cabg = fsp_n_cabg ; label n_cabg='CABG';
     n_ptca = fsp_n_ptca ; label n_ptca='PTCA';
     n_cc   = fsp_n_cc ;   label n_cc  ='CardiacCathetherization';
     n_ce   = fsp_n_ce ;   label n_ce  ='CardiacEnarterectomy';
     n_rff  = fsp_n_rff ;  label n_rff ='ReductionFemurFracture';
     n_thr  = fsp_n_thr ;  label n_thr ='TotalHipReplacement';
     n_tkr  = fsp_n_tkr ;  label n_tkr ='TotalKneereplacement';
     n_xli  = fsp_n_peli;  label n_xli ='ExcisionLargeIntest';
     n_oc   = fsp_n_och ;  label n_oc  ='OpenCholecystectomy';
     n_clc  = fsp_n_cch;   label n_clc ='ClosedCholecstectomy';
     n_ah   = fsp_n_ah ;   label n_ah  ='AbdominalHysterectomy';
     n_vh   = fsp_n_vh ;   label n_vh  ='VaginalHysterectomy';
     n_p    = fsp_n_pros;  label n_p   ='Prostatectomy';
     n_mast = fsp_n_mast;  label n_mast='Masterctomy' ;
     n_lump = fsp_n_lump;  label n_lump='Lumpectomy' ;
     n_bs   = fsp_n_bs;    label n_bs  ='BackSurgery';

     iptotdis   = ipu_t_acdi;   label iptotdis ='InpatTotalDischarges';
     ipsurdis   = ipu_t_acsdi;  label ipsurdis ='InpatSurgeryDischarges';
     ipmeddis   = ipu_t_acmedi; label ipmeddis ='InpatMedicineDischarges';

     iptotdays  = ipu_t_acdy;   label iptotdays ='InpatTotalDays';
     ipsurdays  = ipu_t_acsdy;  label ipsurdays ='InpatSurgeryDays';
     ipmeddays  = ipu_t_acmedy; label ipmeddays ='InpatMedicineDays';

     amb_opv =  amb_t_ov;    label amb_opv ='OutPatientVisits';
     amb_erv =  amb_t_erv;   label amb_erv ='EmergencyRoomVisits';
     amb_asp =  amb_t_asp;   label amb_asp ='AbmSugeryProcedures';
     amb_ors =  amb_t_obsrd; label amb_ors ='ObservationRoomStays';


 data a; set a0;

     %let all_vars = bcs_d bcs_n cmc_d cmc_n1 cdc_d1 cdc_d3 cdc_d4 cdc_n1 cdc_n3 cdc_n4 gso_d gso_n
                     n_cabg n_ptca n_cc n_ce n_rff n_thr n_tkr n_xli n_oc n_clc n_ah n_vh n_p n_mast n_lump n_bs
                     iptotdis ipsurdis ipmeddis iptotdays ipsurdays ipmeddays amb_opv amb_erv amb_asp amb_ors 
                     m_months;

     proc sort; by newagec gender racec state_code org_id plantypec bene_county_cd zip5;

     proc means data=a n sum noprint;
           by newagec gender racec state_code org_id plantypec bene_county_cd zip5;
               var &all_vars;
               output out=allst0 n=  sum= /autoname;


  data new.hedis06hmoppo; set allst0;

         if _TYPE_ = 0;
         tot_n = _FREQ_ ;
         totmon = m_months_sum;

         drop _TYPE_ ;
         drop _FREQ_ ;
         drop m_months_sum;
         drop m_months_n ;

         proc contents data=new.hedis06hmoppo varnum;
              title 'Content of HEDIS06hmoppo';

         proc print data=new.hedis06hmoppo(obs=5);

         proc freq;
              tables plantypec org_id ;

endsas;
